iT邦幫忙

2021 iThome 鐵人賽

DAY 23
1
Software Development

都是 P 開頭的程式語言,你是在 py 啥啦系列 第 23

[23] 用 python 刷 Leetcode: 290 Word Pattern

  • 分享至 

  • xImage
  •  

因為我對 python 不熟,題目可能會在簡單和中等之間跳來跳去

用 Python3 解 LeetCode 系列,290 Word Pattern,屬於 Easy

原始題目

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

Example 1:

Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Example 2:

Input: pattern = "abba", s = "dog cat cat fish"
Output: false

Example 3:

Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false

Example 4:

Input: pattern = "abba", s = "dog dog dog dog"
Output: false

題目分析

  • 給你一個模式patterns
  • pattern 裡的每個字母對應s一個單字,相同字母單字必須一樣
  • 判斷s是否符合pattern

解題過程

  1. 長度判斷,如果pattern字母數量和s單字數量不同,一定就是 false
  2. mapping_dict的 key 是pattern的字母,值是同 index 的s內容
  3. exist_check_dict的 key 是s的單字,值是pattern的字母
  4. 遍歷pattern所有值
  5. 檢查當前pattern字母為 key 的mapping_dict資料,和s中相同位置的單字有沒有一樣
  6. 檢查和當前pattern字母同 index 的 s 單字所對應的字母和exist_check_dict紀錄中的字母有沒有一樣
class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        # 長度判斷,如果不同長度一定就是 false
        words_list = s.split(' ')
        words_len = len(words_list)
        pattern_len = len(pattern)
        if words_len != pattern_len:
            return False
        
        mapping_dict = dict()
        exist_check_dict = dict()

        for index, val in enumerate(pattern):
            
            # 如果 pattern key 存在
            if val in mapping_dict.keys():
                
                # 檢查 pattern 字母代表的單字是否一致
                if mapping_dict[val] != words_list[index]:
                    return False
            else:
                # 檢查有沒有重複的單字在不同字母中
                if words_list[index] in exist_check_dict:
                    if exist_check_dict[words_list[index]] != val:
                        return False
                else :
                    mapping_dict[val] = words_list[index]
                    exist_check_dict[words_list[index]] = val

        return True

結果

result


上一篇
[22] [Discord 機器人] 02.擲骰機器人
下一篇
[24] 用 python 刷 Leetcode: 66 plus-one
系列文
都是 P 開頭的程式語言,你是在 py 啥啦30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
Judge
iT邦新手 5 級 ‧ 2022-08-17 00:25:28

安安我是剛入門的新手,想請問def wordPattern(self, pattern: str, s: str) -> bool:
這行當中的 -> bool: 是什麼語法?

因為直接Google都一直搜到別的東西 所以想詢問您這種寫法什麼意思?

我要留言

立即登入留言